import * as FileApi from "@/api/infra/file";

export const  fileInfoEnum =  {
  routeId: "routeId",
  officeId: "officeId",
}

export function currentTime() {
  let now = new Date();

  let year = now.getFullYear(); //年
  let month = now.getMonth() + 1; //月
  let day = now.getDate(); //日

  let hh = now.getHours(); //时
  let mm = now.getMinutes(); //分
  let ss = now.getSeconds();
  let clock = year + "";

  if (month < 10)
    clock += "0";

  clock += month + "";

  if (day < 10)
    clock += "0";

  clock += day + "";

  if (hh < 10)
    clock += "0";

  clock += hh + "";
  if (mm < 10) clock += '0';
  clock += mm;
  if (ss < 10) clock += '0';
  clock += ss;
  return (clock);
}



export function setPluginStorageItem(key,value){
  wps.PluginStorage.setItem(key,value)
}
export function getPluginStorageItem(key){
  return wps.PluginStorage.getItem(key)
}
export function removePluginStorageItem(key){
  wps.PluginStorage.removeItem(key)
}


/**
 * WPS下载文件到本地打开（业务系统可根据实际情况进行修改）
 * @param {*} url 文件流的下载路径
 * @param {*} callback 下载后的回调
 */
export function DownloadFile(filePathUrl,fileName, callback) {
    let xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            //需要业务系统的服务端在传递文件流时，确保请求中的参数有filename
            // let fileName = pGetFileName(xhr, filePathUrl)
            //落地打开模式下，WPS会将文件下载到本地的临时目录，在关闭后会进行清理
            let path = wps.Env.GetTempPath() + "/" + fileName
            let reader = new FileReader();
            reader.onload = function () {
                wps.FileSystem.writeAsBinaryString(path, reader.result);
                callback(path);
            };
            reader.readAsBinaryString(xhr.response);
        }
    }
    xhr.open('GET', filePathUrl);
    xhr.responseType = 'blob';
    xhr.send();
}


/**
 * WPS上传文件到服务端（业务系统可根据实际情况进行修改，为了兼容中文，服务端约定用UTF-8编码格式）
 * @param {*} strFileName 上传到服务端的文件名称（包含文件后缀）
 * @param {*} strPath 上传文件的文件路径（文件在操作系统的绝对路径）
 */
export async function UploadFile(strFileName, strPath) {

    const blob = readAsBinaryString(strPath);
    const formData = new FormData();
    formData.append('file', blob, strFileName); // 'file'是表单字段名，'filename.ext'是上传文件的名称

    const res = await FileApi.updateFile(formData);
    return res;
}

/**
 * 获取文件路径
 * @param {*} html 文件全称
 */
export function getOriginURL(html) {
    return document.location.origin + html;
}


/**
 * 根据传入Document对象，获取OA传入的参数的某个Key值的Value
 * @param {*} Doc
 * @param {*} Key
 * 返回值：返回指定 Key的 Value
 */
export function GetDocParamsValue(Doc, Key) {
    if (!Doc) {
        return null;
    }

     let l_Params = getPluginStorageItem(Doc.FullName);
    if (!l_Params) {
        return null;
    }

    let l_objParams = JSON.parse(l_Params);
    if (typeof(l_objParams) == "undefined") {
        return null;
    }

    let l_rtnValue = l_objParams[Key];
    if (typeof(l_rtnValue) == "undefined" || l_rtnValue == null) {
        return null;
    }
    return l_rtnValue;
}

export function initDocParamsValue(Doc, params) {

    // alert("Doc.FullName："+Doc.FullName)
    // alert("Doc.DocID："+Doc.FullName)
    if (params == undefined) {
        params = {}
    }
    setPluginStorageItem(Doc.FullName, JSON.stringify(params));
}

export function setDocParamsValue(Doc, Key,value) {

    let params = null;
    let l_Params = getPluginStorageItem(Doc.FullName);
    if (!l_Params) {
        params = {}
    }else {
        params = JSON.parse(l_Params);
    }
    params[Key] = value ;
    setPluginStorageItem(Doc.FullName, JSON.stringify(params));
}

/**
 * 作用：文档关闭后，删除对应的PluginStorage内的参数信息
 * 返回值：没有返回值
 * @param {*} doc
 */
export function pRemoveDocParam(doc) {
    if (!doc) return;
    removePluginStorageItem(doc.FullName);
    return;
}

/**
 * 作用：获取文档的Path或者临时文件路径
 * @param {*} doc
 */
export function getDocSavePath(doc) {
    if (!doc) {
        return;
    }
    if (doc.Path == "") { //对于不落地文档，文档路径为空
        return wps.Env.GetTempPath();
    } else {
        return doc.Path
    }
}


/**
 * 作用：获取一个有效的临时文档路径，用于保存转换格式后的文档
 * @param {*} doc
 */
export function pGetValidDocTempPath(doc) {
    if (!doc) {
        return;
    }
    if (doc.Path == "") { //对于不落地文档，文档路径为空
        return wps.Env.GetTempPath()+"/"+doc.Name.split(".")[0];
    } else {
        return doc.FullName.split(".")[0]
    }
}

/**
 * 发送异步消息
 */
export function sendWebNotify(msgType,msgDate,doc,force) {

  if(force !== false){
    force = true;
  }

  let routeId = GetDocParamsValue(doc, fileInfoEnum.routeId);
  let officeId = GetDocParamsValue(doc, fileInfoEnum.officeId);
  let date = {
    "msgType":msgType,
    [fileInfoEnum.routeId]: routeId,
    [fileInfoEnum.officeId]: officeId,
    ...msgDate,
  }

  window.Application.OAAssist.WebNotify(
    JSON.stringify(date),
    force
  )
}




























function readAsBinaryString(strPath) {
    let fileData = wps.FileSystem.readAsBinaryString(strPath);

    const arrayBuffer = new ArrayBuffer(fileData.length);
    const uint8Array = new Uint8Array(arrayBuffer);

    for (let i = 0; i < fileData.length; i++) {
        uint8Array[i] = fileData.charCodeAt(i);
    }

    return new Blob([uint8Array], /*{ type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' }*/);
}
